package com.cskaoyan.javase.string.introduction1;

/**
 * @description: 介绍String类
 * @author: wuguidong@cskaoyan.onaliyun.com
 **/

/**
 * String：
 *
 * - 在Java语言中，所有类似“ABC”这样用双引号引起来的字符串，都是String类的对象
 * - String类位于java.lang包下，是Java语言的核心类
 * - String类提供了字符串表示、比较、查找、截取、大小写转换等各种针对字符串的操作
 * 只要你能够想得到的对字符串的操作，String类中都有
 *
 * 我们今天会学习很多API，大家有个印象就可以，等到实际开发中需要用了
 * 查API文档，直接百度
 *
 * 我们首先去看它的构造方法：
 * //创建空字符串对象，需要注意的是null != ""
 * public String()
 * //把字节数组中的元素转换成字符串，字节数组中可以是字符，也可以是ASCII码值
 * public String(byte[] bytes)
 * //同上，只不过指定了区间
 * public String(byte[] bytes,int offset,int length)
 * //同字节数组
 * public String(char[] value)
 * //同上
 * public String(char[] value,int offset,int count)
 * //套娃
 * public String(String original)
 *
 *
 */
public class Demo {
    public static void main(String[] args) {
       //实际上，String类的构造方法用途不多，了解即可
        //创建空字符串对象，需要注意的是null != ""
       // public String()
        String s = new String();
        System.out.println(s);
        System.out.println("");
        System.out.println(" ");
        //string=null时不能调用对象的方法 否则空指针异常
        //s = null;
        //System.out.println(s);

        //public String(byte[] bytes)
        //把byte数组转换成字符串 byte数组中装的是编码值
        byte[] bytes = {97,98,99}; //a,b,c
        System.out.println(new String(bytes));
        byte[] bytes2 = {'a','b','c'};
        System.out.println(new String(bytes2));

        // public String(char[] value)
        char[] chars = {'a','b','c'};
        System.out.println(new String(chars));
        System.out.println(chars); //直接输出char数组的数组名

        //public String(byte[] bytes,int offset,int length) offset开始的下标
        //public String(char[] value,int offset,int count)
        System.out.println(new String(bytes,0,1));
        System.out.println(new String(chars,0,3));


        //套娃式的构造方法
        String s2 = "Hello World";
        System.out.println(new String(s2));
        //所有创建字符串对象用new的方式都使用了构造器在堆上开辟空间 创建了字符串对象
        //但是String s2 = "Hello World";这种形式不会
    }
}
